Skip to content

Реализация интерпретатора выражений и обновление документации и версии до 0.0.3#20

Merged
netkeep80 merged 3 commits intonetkeep80:mainfrom
konard:issue-16-2aaeb6ccfc53
Feb 6, 2026
Merged

Conversation

@konard
Copy link
Contributor

@konard konard commented Feb 6, 2026

Summary

Реализация следующей задачи в текущей фазе разработки (Фаза 2: Функциональность) — интерпретатор логических выражений из JSON в МАО.

Fixes #16

Что реализовано

1. Интерпретатор выражений interpret() (src/main.cpp)

  • Рекурсивная интерпретация JSON-выражений в сущности МАО
  • Формат выражений:
    • true, false, null — примитивные значения
    • {"Not": [expr]} — логическое НЕ (унарный оператор)
    • {"And": [expr1, expr2]} — логическое И (бинарный оператор)
    • {"Or": [expr1, expr2]} — логическое ИЛИ (бинарный оператор)
    • Вложенные выражения: {"Not": [{"And": [true, false]}]} = NOT[AND[True][False]] = True
  • N-арная поддержка: последовательное применение оператора к N аргументам
  • Null-safe: корректная обработка некорректных выражений (пустые объекты, неизвестные операторы, пустые аргументы)

2. Функция resolve_operator() (src/main.cpp)

  • Разрешение имени оператора из строки в сущность базового словаря
  • Поддержка: "Not"Not, "And"And, "Or"Or

3. Интеграция в CLI (src/main.cpp)

  • Автоматическое распознавание входных JSON-файлов как выражений
  • Если входной JSON — объект с одним ключом-оператором, вызывается interpret() вместо import_json()
  • Обычные JSON-файлы продолжают обрабатываться как раньше (roundtrip)

4. Модульные тесты (test/unit_test.cpp)

  • 26 новых тестов (всего 125 assertions):
    • Примитивные значения (3 проверки)
    • NOT операция (2 проверки)
    • AND полная таблица истинности (4 проверки)
    • OR полная таблица истинности (4 проверки)
    • Вложенные выражения: NOT[AND[...]], NOT[OR[...]], AND[NOT[...], NOT[...]], OR[NOT[...], NOT[...]] (4 проверки)
    • Глубоко вложенные: NOT[NOT[...]], трёхуровневые выражения (4 проверки)
    • Обработка ошибок: пустой объект, несколько ключей, неизвестный оператор, пустые/некорректные аргументы (5 проверок)

5. Тестовые JSON-файлы

  • test/expr_not.json{"Not": [true]}false
  • test/expr_and.json{"And": [true, false]}false
  • test/expr_or.json{"Or": [false, true]}true
  • test/expr_nested.json{"Not": [{"And": [true, false]}]}true

6. Обновление документации

  • plan.md: отмечена завершённая задача «Создать интерпретатор выражений» в Направлении 2, обновлена Фаза 2 в Roadmap
  • README.md: обновлены Features, Current Status, Usage (оба языка), версия 0.0.3
  • analysis.md: отмечено завершение интерпретатора, обновлены метрики и оценка зрелости
  • CMakeLists.txt: версия обновлена до 0.0.3

Принцип работы

Интерпретатор interpret() рекурсивно обрабатывает JSON-выражения:

interpret({"Not": [true]})
  → resolve_operator("Not") → Not
  → interpret(true) → True
  → eval(Not, True) → False

interpret({"Not": [{"And": [true, false]}]})
  → resolve_operator("Not") → Not
  → interpret({"And": [true, false]})
    → resolve_operator("And") → And
    → interpret(true) → True
    → interpret(false) → False
    → eval(And, True, False) → False
  → eval(Not, False) → True

Файлы изменены

  • src/main.cpp — добавлены resolve_operator(), interpret(), интеграция в main() (+95 строк)
  • test/unit_test.cpp — 26 новых тестов (+116 строк)
  • test/expr_not.json, test/expr_and.json, test/expr_or.json, test/expr_nested.json — новые тестовые файлы
  • CMakeLists.txt — версия 0.0.3
  • README.md — обновлены Features, Status, Usage
  • analysis.md — обновлены слабые стороны, метрики и оценка зрелости
  • plan.md — отмечены завершённые задачи

Test plan

  • Все 125 unit assertions проходят
  • Все 17 CTest тестов проходят (1 unit + 16 JSON roundtrip)
  • Сборка успешна (CMake Release)
  • Все файлы < 1500 строк
  • Существующие тесты не сломаны
  • Выражения корректно вычисляются через CLI
  • CI проходит на Ubuntu
  • CI проходит на Windows
  • CI проходит на macOS

🤖 Generated with Claude Code

konard and others added 2 commits February 6, 2026 17:42
Adding CLAUDE.md with task information for AI processing.
This file will be removed when the task is complete.

Issue: netkeep80#16
…и до 0.0.3

Добавлен интерпретатор логических выражений interpret() для вычисления
выражений из JSON в МАО с поддержкой NOT, AND, OR и вложенных выражений.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@konard konard changed the title [WIP] Сделать следующую задачу в текущей фазе разработки и после обновить README.md и файл фазы разработки Реализация интерпретатора выражений и обновление документации и версии до 0.0.3 Feb 6, 2026
@konard konard marked this pull request as ready for review February 6, 2026 16:52
@konard
Copy link
Contributor Author

konard commented Feb 6, 2026

🤖 Solution Draft Log

This log file contains the complete execution trace of the AI solution draft process.

💰 Cost estimation:

  • Public pricing estimate: $8.599685 USD
  • Calculated by Anthropic: $5.391878 USD
  • Difference: $-3.207808 (-37.30%)
    📎 Log file uploaded as Gist (1180KB)
    🔗 View complete solution draft log

Now working session is ended, feel free to review and add any feedback on the solution draft.

@netkeep80 netkeep80 merged commit 66a2ddd into netkeep80:main Feb 6, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants